// Auto-generated, do not edit.

extern "C" {

cusolverStatus_t CUSOLVERAPI cusolverGetProperty(libraryPropertyType type,
                                                 int *value) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(libraryPropertyType, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverGetProperty");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(type, value);
}

cusolverStatus_t CUSOLVERAPI cusolverGetVersion(int *version) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverGetVersion");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(version);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCreate(cusolverDnHandle_t *handle) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreate");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cusolverStatus_t CUSOLVERAPI cusolverSpCreate(cusolverSpHandle_t *handle) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverSpHandle_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpCreate");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDestroy(cusolverDnHandle_t handle) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroy");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cusolverStatus_t CUSOLVERAPI cusolverSpDestroy(cusolverSpHandle_t handle) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverSpHandle_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpDestroy");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSetStream(cusolverDnHandle_t handle,
                                                 cudaStream_t streamId) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cudaStream_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSetStream");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, streamId);
}

cusolverStatus_t CUSOLVERAPI cusolverSpSetStream(cusolverSpHandle_t handle,
                                                 cudaStream_t streamId) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverSpHandle_t, cudaStream_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpSetStream");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, streamId);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGetStream(cusolverDnHandle_t handle,
                                                 cudaStream_t *streamId) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cudaStream_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGetStream");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, streamId);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSParamsCreate(cusolverDnIRSParams_t *params_ptr) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSParamsCreate");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params_ptr);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSParamsDestroy(cusolverDnIRSParams_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSParamsDestroy");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsSetRefinementSolver(
    cusolverDnIRSParams_t params, cusolverIRSRefinement_t refinement_solver) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t,
                                                  cusolverIRSRefinement_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetRefinementSolver");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, refinement_solver);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsSetSolverMainPrecision(
    cusolverDnIRSParams_t params, cusolverPrecType_t solver_main_precision) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t,
                                                  cusolverPrecType_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetSolverMainPrecision");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, solver_main_precision);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsSetSolverLowestPrecision(
    cusolverDnIRSParams_t params, cusolverPrecType_t solver_lowest_precision) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t,
                                                  cusolverPrecType_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetSolverLowestPrecision");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, solver_lowest_precision);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsSetSolverPrecisions(
    cusolverDnIRSParams_t params, cusolverPrecType_t solver_main_precision,
    cusolverPrecType_t solver_lowest_precision) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnIRSParams_t, cusolverPrecType_t, cusolverPrecType_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetSolverPrecisions");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, solver_main_precision, solver_lowest_precision);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSParamsSetTol(cusolverDnIRSParams_t params, double val) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t, double);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetTol");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, val);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSParamsSetTolInner(cusolverDnIRSParams_t params, double val) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t, double);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetTolInner");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, val);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsSetMaxIters(
    cusolverDnIRSParams_t params, cusolver_int_t maxiters) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t, cusolver_int_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetMaxIters");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, maxiters);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsSetMaxItersInner(
    cusolverDnIRSParams_t params, cusolver_int_t maxiters_inner) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t, cusolver_int_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsSetMaxItersInner");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, maxiters_inner);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSParamsGetMaxIters(
    cusolverDnIRSParams_t params, cusolver_int_t *maxiters) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSParamsGetMaxIters");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, maxiters);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSParamsEnableFallback(cusolverDnIRSParams_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsEnableFallback");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSParamsDisableFallback(cusolverDnIRSParams_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSParams_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSParamsDisableFallback");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSInfosDestroy(cusolverDnIRSInfos_t infos) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSInfosDestroy");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSInfosCreate(cusolverDnIRSInfos_t *infos_ptr) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSInfosCreate");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos_ptr);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSInfosGetNiters(
    cusolverDnIRSInfos_t infos, cusolver_int_t *niters) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSInfosGetNiters");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos, niters);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSInfosGetOuterNiters(
    cusolverDnIRSInfos_t infos, cusolver_int_t *outer_niters) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t, cusolver_int_t *);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSInfosGetOuterNiters");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos, outer_niters);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnIRSInfosRequestResidual(cusolverDnIRSInfos_t infos) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSInfosRequestResidual");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSInfosGetResidualHistory(
    cusolverDnIRSInfos_t infos, void **residual_history) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t, void **);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnIRSInfosGetResidualHistory");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos, residual_history);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSInfosGetMaxIters(
    cusolverDnIRSInfos_t infos, cusolver_int_t *maxiters) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnIRSInfos_t, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSInfosGetMaxIters");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(infos, maxiters);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZZgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZZgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZCgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZCgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZKgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZKgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZEgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZEgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZYgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZYgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCCgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCCgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCEgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCEgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCKgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCKgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCYgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCYgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDDgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDDgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDSgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDSgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDHgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDHgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDBgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDBgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDXgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDXgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSSgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSSgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSHgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSHgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSBgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSBgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSXgesv(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSXgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZZgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZZgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZCgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZCgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZKgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZKgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZEgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZEgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZYgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuDoubleComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuDoubleComplex *,
      cusolver_int_t, cusolver_int_t *, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZYgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCCgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCCgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCKgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCKgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCEgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCEgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCYgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    cuComplex *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cuComplex *,
      cusolver_int_t, cusolver_int_t *, cuComplex *, cusolver_int_t,
      cuComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCYgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDDgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDDgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDSgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDSgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDHgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDHgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDBgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDBgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDXgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs,
    double *dA, cusolver_int_t ldda, cusolver_int_t *dipiv, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, double *,
      cusolver_int_t, cusolver_int_t *, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDXgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSSgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSSgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSHgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSHgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSBgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSBgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSXgesv_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t n, cusolver_int_t nrhs, float *dA,
    cusolver_int_t ldda, cusolver_int_t *dipiv, float *dB, cusolver_int_t lddb,
    float *dX, cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, float *,
      cusolver_int_t, cusolver_int_t *, float *, cusolver_int_t, float *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSXgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, nrhs, dA, ldda, dipiv, dB, lddb, dX, lddx,
                  dWorkspace, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZZgels(cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
                 cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
                 cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
                 cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
                 cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZZgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZCgels(cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
                 cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
                 cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
                 cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
                 cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZCgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZKgels(cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
                 cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
                 cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
                 cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
                 cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZKgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZEgels(cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
                 cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
                 cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
                 cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
                 cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZEgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZYgels(cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
                 cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
                 cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
                 cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
                 cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZYgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCCgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCCgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCKgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCKgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCEgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCEgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCYgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCYgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDDgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDDgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDSgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDSgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDHgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDHgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDBgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDBgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDXgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDXgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSSgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSSgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSHgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSHgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSBgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSBgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSXgels(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *iter, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t, cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSXgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes, iter, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZZgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZZgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZCgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZCgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZKgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZKgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZEgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZEgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZYgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuDoubleComplex *dA, cusolver_int_t ldda,
    cuDoubleComplex *dB, cusolver_int_t lddb, cuDoubleComplex *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, cuDoubleComplex *, cusolver_int_t,
      cuDoubleComplex *, cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZYgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCCgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCCgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCKgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCKgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCEgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCEgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCYgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, cuComplex *dA, cusolver_int_t ldda, cuComplex *dB,
    cusolver_int_t lddb, cuComplex *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      cuComplex *, cusolver_int_t, cuComplex *, cusolver_int_t, cuComplex *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCYgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDDgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDDgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDSgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDSgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDHgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDHgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDBgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDBgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDXgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, double *dA, cusolver_int_t ldda, double *dB,
    cusolver_int_t lddb, double *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      double *, cusolver_int_t, double *, cusolver_int_t, double *,
      cusolver_int_t, void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDXgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSSgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSSgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSHgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSHgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSBgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSBgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSXgels_bufferSize(
    cusolverDnHandle_t handle, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, float *dA, cusolver_int_t ldda, float *dB,
    cusolver_int_t lddb, float *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolver_int_t, cusolver_int_t, cusolver_int_t,
      float *, cusolver_int_t, float *, cusolver_int_t, float *, cusolver_int_t,
      void *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSXgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, nrhs, dA, ldda, dB, lddb, dX, lddx, dWorkspace,
                  lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSXgesv(
    cusolverDnHandle_t handle, cusolverDnIRSParams_t gesv_irs_params,
    cusolverDnIRSInfos_t gesv_irs_infos, cusolver_int_t n, cusolver_int_t nrhs,
    void *dA, cusolver_int_t ldda, void *dB, cusolver_int_t lddb, void *dX,
    cusolver_int_t lddx, void *dWorkspace, size_t lwork_bytes,
    cusolver_int_t *niters, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnIRSParams_t, cusolverDnIRSInfos_t,
      cusolver_int_t, cusolver_int_t, void *, cusolver_int_t, void *,
      cusolver_int_t, void *, cusolver_int_t, void *, size_t, cusolver_int_t *,
      cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSXgesv");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, gesv_irs_params, gesv_irs_infos, n, nrhs, dA, ldda,
                  dB, lddb, dX, lddx, dWorkspace, lwork_bytes, niters, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSXgesv_bufferSize(
    cusolverDnHandle_t handle, cusolverDnIRSParams_t params, cusolver_int_t n,
    cusolver_int_t nrhs, size_t *lwork_bytes) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cusolverDnIRSParams_t,
                                      cusolver_int_t, cusolver_int_t, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSXgesv_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, n, nrhs, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSXgels(
    cusolverDnHandle_t handle, cusolverDnIRSParams_t gels_irs_params,
    cusolverDnIRSInfos_t gels_irs_infos, cusolver_int_t m, cusolver_int_t n,
    cusolver_int_t nrhs, void *dA, cusolver_int_t ldda, void *dB,
    cusolver_int_t lddb, void *dX, cusolver_int_t lddx, void *dWorkspace,
    size_t lwork_bytes, cusolver_int_t *niters, cusolver_int_t *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnIRSParams_t, cusolverDnIRSInfos_t,
      cusolver_int_t, cusolver_int_t, cusolver_int_t, void *, cusolver_int_t,
      void *, cusolver_int_t, void *, cusolver_int_t, void *, size_t,
      cusolver_int_t *, cusolver_int_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSXgels");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, gels_irs_params, gels_irs_infos, m, n, nrhs, dA, ldda,
                  dB, lddb, dX, lddx, dWorkspace, lwork_bytes, niters, d_info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnIRSXgels_bufferSize(
    cusolverDnHandle_t handle, cusolverDnIRSParams_t params, cusolver_int_t m,
    cusolver_int_t n, cusolver_int_t nrhs, size_t *lwork_bytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnIRSParams_t, cusolver_int_t, cusolver_int_t,
      cusolver_int_t, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnIRSXgels_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, nrhs, lwork_bytes);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, float *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, double *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuDoubleComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda,
                                              float *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda,
                                              double *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              cuComplex *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const float *A, int lda,
                                              float *B, int ldb, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const float *, int,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const double *A,
                                              int lda, double *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const double *, int,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const cuComplex *A,
                                              int lda, cuComplex *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuComplex *, int,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs,
                                              const cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuDoubleComplex *,
      int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrfBatched(cusolverDnHandle_t handle,
                                                     cublasFillMode_t uplo,
                                                     int n, float *Aarray[],
                                                     int lda, int *infoArray,
                                                     int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrfBatched(cusolverDnHandle_t handle,
                                                     cublasFillMode_t uplo,
                                                     int n, double *Aarray[],
                                                     int lda, int *infoArray,
                                                     int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotrfBatched(cusolverDnHandle_t handle,
                                                     cublasFillMode_t uplo,
                                                     int n, cuComplex *Aarray[],
                                                     int lda, int *infoArray,
                                                     int batchSize) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      cuComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotrfBatched(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    cuDoubleComplex *Aarray[], int lda, int *infoArray, int batchSize) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      cuDoubleComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrsBatched(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    int nrhs, /* only support rhs = 1*/
    float *A[], int lda, float *B[], int ldb, int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, float *[], int, float *[],
      int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrsBatched(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    int nrhs, /* only support rhs = 1*/
    double *A[], int lda, double *B[], int ldb, int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, double *[], int,
      double *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCpotrsBatched(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
                        int nrhs, /* only support rhs = 1*/
                        cuComplex *A[], int lda, cuComplex *B[], int ldb,
                        int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, cuComplex *[], int,
      cuComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZpotrsBatched(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
                        int nrhs, /* only support rhs = 1*/
                        cuDoubleComplex *A[], int lda, cuDoubleComplex *B[],
                        int ldb, int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, cuDoubleComplex *[], int,
      cuDoubleComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, double *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              cuComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnStrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, float *, int,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnStrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDtrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, double *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDtrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCtrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCtrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZtrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZtrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnStrtri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo,
                                              cublasDiagType_t diag, int n,
                                              float *A, int lda, float *work,
                                              int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, float *, int,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnStrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDtrtri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo,
                                              cublasDiagType_t diag, int n,
                                              double *A, int lda, double *work,
                                              int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, double *,
      int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDtrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCtrtri(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, cuComplex *A, int lda, cuComplex *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, cuComplex *,
      int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCtrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZtrtri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo,
                                              cublasDiagType_t diag, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int,
      cuDoubleComplex *, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZtrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSlauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSlauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDlauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDlauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnClauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnClauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZlauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZlauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSlauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSlauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDlauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, double *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDlauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnClauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              cuComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnClauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZlauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZlauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgetrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, float *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgetrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, double *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCgetrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZgetrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuDoubleComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgetrf(cusolverDnHandle_t handle, int m,
                                              int n, float *A, int lda,
                                              float *Workspace, int *devIpiv,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, float *, int, float *, int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgetrf(cusolverDnHandle_t handle, int m,
                                              int n, double *A, int lda,
                                              double *Workspace, int *devIpiv,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, double *, int, double *, int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgetrf(cusolverDnHandle_t handle, int m,
                                              int n, cuComplex *A, int lda,
                                              cuComplex *Workspace,
                                              int *devIpiv, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, cuComplex *,
                                      int, cuComplex *, int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgetrf(cusolverDnHandle_t handle, int m,
                                              int n, cuDoubleComplex *A,
                                              int lda,
                                              cuDoubleComplex *Workspace,
                                              int *devIpiv, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, cuDoubleComplex *,
      int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSlaswp(cusolverDnHandle_t handle, int n,
                                              float *A, int lda, int k1, int k2,
                                              const int *devIpiv, int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, float *, int, int, int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSlaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDlaswp(cusolverDnHandle_t handle, int n,
                                              double *A, int lda, int k1,
                                              int k2, const int *devIpiv,
                                              int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, double *, int, int, int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDlaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnClaswp(cusolverDnHandle_t handle, int n,
                                              cuComplex *A, int lda, int k1,
                                              int k2, const int *devIpiv,
                                              int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, cuComplex *, int, int, int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnClaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZlaswp(cusolverDnHandle_t handle, int n,
                                              cuDoubleComplex *A, int lda,
                                              int k1, int k2,
                                              const int *devIpiv, int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  cuDoubleComplex *, int, int,
                                                  int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZlaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgetrs(cusolverDnHandle_t handle,
                                              cublasOperation_t trans, int n,
                                              int nrhs, const float *A, int lda,
                                              const int *devIpiv, float *B,
                                              int ldb, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const float *, int,
      const int *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgetrs(cusolverDnHandle_t handle,
                                              cublasOperation_t trans, int n,
                                              int nrhs, const double *A,
                                              int lda, const int *devIpiv,
                                              double *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const double *, int,
      const int *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgetrs(cusolverDnHandle_t handle,
                                              cublasOperation_t trans, int n,
                                              int nrhs, const cuComplex *A,
                                              int lda, const int *devIpiv,
                                              cuComplex *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const cuComplex *, int,
      const int *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgetrs(
    cusolverDnHandle_t handle, cublasOperation_t trans, int n, int nrhs,
    const cuDoubleComplex *A, int lda, const int *devIpiv, cuDoubleComplex *B,
    int ldb, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const cuDoubleComplex *,
      int, const int *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgeqrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgeqrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCgeqrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZgeqrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, float *A, int lda,
                                              float *TAU, float *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, float *, int, float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, double *A, int lda,
                                              double *TAU, double *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, double *,
                                      int, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, cuComplex *A, int lda,
                                              cuComplex *TAU,
                                              cuComplex *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  cuComplex *, int, cuComplex *,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, cuDoubleComplex *A,
                                              int lda, cuDoubleComplex *TAU,
                                              cuDoubleComplex *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, cuDoubleComplex *,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverSpScsrlsvqr(cusolverSpHandle_t handle,
    int m, int nnz,
    const cusparseMatDescr_t descrA,
    const float *csrValA,
    const int *csrRowPtrA,
    const int *csrColIndA,
    const float *b, float tol,
    int reorder, float *x,
    int *singularity) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
    cusolverSpHandle_t, int, int, const cusparseMatDescr_t, const float *,
    const int *, const int *, const float *, float, int, float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpScsrlsvqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, nnz, descrA, csrValA, csrRowPtrA, csrColIndA,
                  b, tol, reorder, x, singularity);
}

cusolverStatus_t CUSOLVERAPI cusolverSpDcsrlsvqr(cusolverSpHandle_t handle,
    int m, int nnz,
    const cusparseMatDescr_t descrA,
    const double *csrValA,
    const int *csrRowPtrA,
    const int *csrColIndA,
    const double *b, double tol,
    int reorder, double *x,
    int *singularity) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
    cusolverSpHandle_t, int, int, const cusparseMatDescr_t, const double *,
    const int *, const int *, const double *, double, int, double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpDcsrlsvqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, nnz, descrA, csrValA, csrRowPtrA, csrColIndA,
                  b, tol, reorder, x, singularity);
}

cusolverStatus_t CUSOLVERAPI cusolverSpCcsrlsvqr(cusolverSpHandle_t handle,
    int m, int nnz,
    const cusparseMatDescr_t descrA,
    const cuComplex *csrValA,
    const int *csrRowPtrA,
    const int *csrColIndA,
    const cuComplex *b, float tol,
    int reorder, cuComplex *x,
    int *singularity) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
    cusolverSpHandle_t, int, int, const cusparseMatDescr_t, const cuComplex *,
    const int *, const int *, const cuComplex *, float, int,
    cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpCcsrlsvqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, nnz, descrA, csrValA, csrRowPtrA, csrColIndA,
                  b, tol, reorder, x, singularity);
}

cusolverStatus_t CUSOLVERAPI cusolverSpZcsrlsvqr(cusolverSpHandle_t handle,
    int m, int nnz,
    const cusparseMatDescr_t descrA,
    const cuDoubleComplex *csrValA,
    const int *csrRowPtrA,
    const int *csrColIndA,
    const cuDoubleComplex *b,
    double tol,
    int reorder,
    cuDoubleComplex *x,
    int *singularity) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
    cusolverSpHandle_t, int, int, const cusparseMatDescr_t,
    const cuDoubleComplex *, const int *, const int *, const cuDoubleComplex *,
    double, int, cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverSpZcsrlsvqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, nnz, descrA, csrValA, csrRowPtrA, csrColIndA,
                  b, tol, reorder, x, singularity);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const float *A, int lda,
    const float *tau, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int,
                                      const float *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const double *A, int lda,
    const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  int, const double *, int,
                                                  const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const cuComplex *A, int lda,
    const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  int, const cuComplex *, int,
                                                  const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const cuDoubleComplex *A,
    int lda, const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgqr(cusolverDnHandle_t handle, int m,
                                              int n, int k, float *A, int lda,
                                              const float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, float *, int, const float *, float *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgqr(cusolverDnHandle_t handle, int m,
                                              int n, int k, double *A, int lda,
                                              const double *tau, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, double *, int, const double *,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungqr(cusolverDnHandle_t handle, int m,
                                              int n, int k, cuComplex *A,
                                              int lda, const cuComplex *tau,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, cuComplex *, int, const cuComplex *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungqr(
    cusolverDnHandle_t handle, int m, int n, int k, cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, cuDoubleComplex *, int,
      const cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const float *A, int lda, const float *tau,
    const float *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const float *, int, const float *, const float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const double *A, int lda, const double *tau,
    const double *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const double *, int, const double *, const double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCunmqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuComplex *A, int lda, const cuComplex *tau,
    const cuComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuComplex *, int, const cuComplex *, const cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, const cuDoubleComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuDoubleComplex *, int, const cuDoubleComplex *,
      const cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const float *A, int lda, const float *tau, float *C,
    int ldc, float *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const float *, int, const float *, float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const double *A, int lda, const double *tau, double *C,
    int ldc, double *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const double *, int, const double *, double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCunmqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuComplex *A, int lda, const cuComplex *tau,
    cuComplex *C, int ldc, cuComplex *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuComplex *, int, const cuComplex *, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, cuDoubleComplex *C, int ldc,
    cuDoubleComplex *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuDoubleComplex *, int, const cuDoubleComplex *, cuDoubleComplex *,
      int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, int *ipiv,
                                              float *work, int lwork,
                                              int *info) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, int *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, int *ipiv,
                                              double *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *, double *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, int *ipiv,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              int *ipiv, cuDoubleComplex *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const float *A, int lda, const int *ipiv, float *B, int ldb, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const float *, int,
      const int *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const double *A, int lda, const int *ipiv, double *B, int ldb, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const double *, int,
      const int *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const cuComplex *A, int lda, const int *ipiv, cuComplex *B, int ldb,
    int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuComplex *, int,
      const int *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const cuDoubleComplex *A, int lda, const int *ipiv, cuDoubleComplex *B,
    int ldb, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuDoubleComplex *,
      int, const int *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const float *A, int lda,
                                              const int *ipiv, float *B,
                                              int ldb, float *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const float *, int,
      const int *, float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const double *A,
                                              int lda, const int *ipiv,
                                              double *B, int ldb, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const double *, int,
      const int *, double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCsytrs(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
                 int nrhs, const cuComplex *A, int lda, const int *ipiv,
                 cuComplex *B, int ldb, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuComplex *, int,
      const int *, cuComplex *, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrs(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const cuDoubleComplex *A, int lda, const int *ipiv, cuDoubleComplex *B,
    int ldb, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuDoubleComplex *,
      int, const int *, cuDoubleComplex *, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, float *A, int lda,
    const int *ipiv, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, double *A, int lda,
    const int *ipiv, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuComplex *A,
    int lda, const int *ipiv, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      cuComplex *, int, const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, const int *ipiv, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda,
                                              const int *ipiv, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, const int *,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda,
                                              const int *ipiv, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, const int *,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              const int *ipiv, cuComplex *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, const int *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytri(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, const int *ipiv, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      const int *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgebrd(cusolverDnHandle_t handle, int m,
                                              int n, float *A, int lda,
                                              float *D, float *E, float *TAUQ,
                                              float *TAUP, float *Work,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, float *, int, float *, float *, float *,
      float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgebrd(cusolverDnHandle_t handle, int m,
                                              int n, double *A, int lda,
                                              double *D, double *E,
                                              double *TAUQ, double *TAUP,
                                              double *Work, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, double *, int, double *, double *, double *,
      double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgebrd(cusolverDnHandle_t handle, int m,
                                              int n, cuComplex *A, int lda,
                                              float *D, float *E,
                                              cuComplex *TAUQ, cuComplex *TAUP,
                                              cuComplex *Work, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuComplex *, int, float *, float *,
      cuComplex *, cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgebrd(
    cusolverDnHandle_t handle, int m, int n, cuDoubleComplex *A, int lda,
    double *D, double *E, cuDoubleComplex *TAUQ, cuDoubleComplex *TAUP,
    cuDoubleComplex *Work, int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, double *, double *,
      cuDoubleComplex *, cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const float *A, int lda, const float *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, const float *, int,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const double *A, int lda, const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, const double *, int,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const cuComplex *A, int lda, const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, const cuComplex *,
      int, const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const cuDoubleComplex *A, int lda, const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int,
      const cuDoubleComplex *, int, const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgbr(cusolverDnHandle_t handle,
                                              cublasSideMode_t side, int m,
                                              int n, int k, float *A, int lda,
                                              const float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, float *, int,
      const float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgbr(cusolverDnHandle_t handle,
                                              cublasSideMode_t side, int m,
                                              int n, int k, double *A, int lda,
                                              const double *tau, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, double *, int,
      const double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungbr(cusolverDnHandle_t handle,
                                              cublasSideMode_t side, int m,
                                              int n, int k, cuComplex *A,
                                              int lda, const cuComplex *tau,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, cuComplex *, int,
      const cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZungbr(cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n,
                 int k, cuDoubleComplex *A, int lda, const cuDoubleComplex *tau,
                 cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, cuDoubleComplex *,
      int, const cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const float *A,
    int lda, const float *d, const float *e, const float *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const float *, int,
      const float *, const float *, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const double *A,
    int lda, const double *d, const double *e, const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const double *, int,
      const double *, const double *, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChetrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const cuComplex *A,
    int lda, const float *d, const float *e, const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuComplex *, int,
      const float *, const float *, const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChetrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhetrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    const cuDoubleComplex *A, int lda, const double *d, const double *e,
    const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuDoubleComplex *, int,
      const double *, const double *, const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhetrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrd(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *d,
                                              float *e, float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, float *, float *,
      float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrd(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, double *A, int lda,
    double *d, double *e, double *tau, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, double *,
      double *, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChetrd(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, float *d,
                                              float *e, cuComplex *tau,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, float *,
      float *, cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChetrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhetrd(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, double *d, double *e, cuDoubleComplex *tau, cuDoubleComplex *work,
    int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      double *, double *, cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhetrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const float *A,
    int lda, const float *tau, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      const float *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const double *A,
    int lda, const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const double *, int,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const cuComplex *A,
    int lda, const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuComplex *, int,
      const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    const cuDoubleComplex *A, int lda, const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgtr(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda,
                                              const float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, const float *,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgtr(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda,
                                              const double *tau, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, const double *,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungtr(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuComplex *A,
    int lda, const cuComplex *tau, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int,
      const cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungtr(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              const cuDoubleComplex *tau,
                                              cuDoubleComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      const cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const float *A, int lda,
    const float *tau, const float *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const float *, int, const float *, const float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const double *A, int lda,
    const double *tau, const double *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const double *, int, const double *, const double *, int,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCunmtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const cuComplex *A, int lda,
    const cuComplex *tau, const cuComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const cuComplex *, int, const cuComplex *, const cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, const cuDoubleComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const cuDoubleComplex *, int, const cuDoubleComplex *,
      const cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormtr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, float *A, int lda, float *tau,
    float *C, int ldc, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, float *, int, float *, float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormtr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, double *A, int lda, double *tau,
    double *C, int ldc, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, double *, int, double *, double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCunmtr(cusolverDnHandle_t handle, cublasSideMode_t side,
                 cublasFillMode_t uplo, cublasOperation_t trans, int m, int n,
                 cuComplex *A, int lda, cuComplex *tau, cuComplex *C, int ldc,
                 cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, cuComplex *, int, cuComplex *, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmtr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, cuDoubleComplex *A, int lda,
    cuDoubleComplex *tau, cuDoubleComplex *C, int ldc, cuDoubleComplex *work,
    int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, cuDoubleComplex *, int, cuDoubleComplex *, cuDoubleComplex *,
      int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvd(
    cusolverDnHandle_t handle, signed char jobu, signed char jobvt, int m,
    int n, float *A, int lda, float *S, float *U, int ldu, float *VT, int ldvt,
    float *work, int lwork, float *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, float *, int,
      float *, float *, int, float *, int, float *, int, float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvd(
    cusolverDnHandle_t handle, signed char jobu, signed char jobvt, int m,
    int n, double *A, int lda, double *S, double *U, int ldu, double *VT,
    int ldvt, double *work, int lwork, double *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, double *, int,
      double *, double *, int, double *, int, double *, int, double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCgesvd(cusolverDnHandle_t handle, signed char jobu, signed char jobvt,
                 int m, int n, cuComplex *A, int lda, float *S, cuComplex *U,
                 int ldu, cuComplex *VT, int ldvt, cuComplex *work, int lwork,
                 float *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, cuComplex *, int,
      float *, cuComplex *, int, cuComplex *, int, cuComplex *, int, float *,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZgesvd(cusolverDnHandle_t handle, signed char jobu, signed char jobvt,
                 int m, int n, cuDoubleComplex *A, int lda, double *S,
                 cuDoubleComplex *U, int ldu, cuDoubleComplex *VT, int ldvt,
                 cuDoubleComplex *work, int lwork, double *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, cuDoubleComplex *,
      int, double *, cuDoubleComplex *, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const float *A, int lda, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const float *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const double *A, int lda, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const double *, int, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuComplex *A, int lda, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuComplex *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuDoubleComplex *A, int lda, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuDoubleComplex *, int, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevd(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, float *A, int lda, float *W, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, float *,
      int, float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevd(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, double *A, int lda, double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, double *,
      int, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevd(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, float *W,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, cuComplex *,
      int, float *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevd(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              double *W, cuDoubleComplex *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      cuDoubleComplex *, int, double *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const float *A, int lda, float vl, float vu,
    int il, int iu, int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const float *, int, float, float, int, int, int *,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const double *A, int lda, double vl,
    double vu, int il, int iu, int *meig, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const double *, int, double, double, int, int,
      int *, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const cuComplex *A, int lda, float vl,
    float vu, int il, int iu, int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const cuComplex *, int, float, float, int, int,
      int *, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const cuDoubleComplex *A, int lda, double vl,
    double vu, int il, int iu, int *meig, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const cuDoubleComplex *, int, double, double, int,
      int, int *, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevdx(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, float *A, int lda, float vl, float vu, int il,
    int iu, int *meig, float *W, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, float *, int, float, float, int, int, int *,
      float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevdx(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, double *A, int lda, double vl, double vu,
    int il, int iu, int *meig, double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, double *, int, double, double, int, int, int *,
      double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCheevdx(cusolverDnHandle_t handle, cusolverEigMode_t jobz,
                  cusolverEigRange_t range, cublasFillMode_t uplo, int n,
                  cuComplex *A, int lda, float vl, float vu, int il, int iu,
                  int *meig, float *W, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, cuComplex *, int, float, float, int, int, int *,
      float *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevdx(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, cuDoubleComplex *A, int lda, double vl,
    double vu, int il, int iu, int *meig, double *W, cuDoubleComplex *work,
    int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, cuDoubleComplex *, int, double, double, int, int,
      int *, double *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, const float *A,
    int lda, const float *B, int ldb, float vl, float vu, int il, int iu,
    int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const float *, int,
      const float *, int, float, float, int, int, int *, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, const double *A,
    int lda, const double *B, int ldb, double vl, double vu, int il, int iu,
    int *meig, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const double *, int,
      const double *, int, double, double, int, int, int *, const double *,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, const cuComplex *A,
    int lda, const cuComplex *B, int ldb, float vl, float vu, int il, int iu,
    int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const cuComplex *, int,
      const cuComplex *, int, float, float, int, int, int *, const float *,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n,
    const cuDoubleComplex *A, int lda, const cuDoubleComplex *B, int ldb,
    double vl, double vu, int il, int iu, int *meig, const double *W,
    int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, double, double, int, int, int *,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, float *A, int lda,
    float *B, int ldb, float vl, float vu, int il, int iu, int *meig, float *W,
    float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, float *, int, float *, int,
      float, float, int, int, int *, float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, double *A, int lda,
    double *B, int ldb, double vl, double vu, int il, int iu, int *meig,
    double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, double *, int, double *, int,
      double, double, int, int, int *, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, cuComplex *A,
    int lda, cuComplex *B, int ldb, float vl, float vu, int il, int iu,
    int *meig, float *W, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, float, float, int, int, int *, float *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, cuDoubleComplex *B, int ldb, double vl, double vu, int il, int iu,
    int *meig, double *W, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, double, double, int, int, int *, double *,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const float *A, int lda, const float *B,
    int ldb, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const float *, int, const float *, int,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const double *A, int lda, const double *B,
    int ldb, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const double *, int, const double *, int,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuComplex *A, int lda,
    const cuComplex *B, int ldb, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuComplex *, int, const cuComplex *, int,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *B, int ldb, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvd(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, float *A, int lda, float *B, int ldb,
    float *W, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, float *, int, float *, int, float *, float *, int,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvd(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, double *A, int lda, double *B, int ldb,
    double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, double *, int, double *, int, double *, double *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvd(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, cuComplex *A, int lda, cuComplex *B, int ldb,
    float *W, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuComplex *, int, cuComplex *, int, float *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZhegvd(cusolverDnHandle_t handle, cusolverEigType_t itype,
                 cusolverEigMode_t jobz, cublasFillMode_t uplo, int n,
                 cuDoubleComplex *A, int lda, cuDoubleComplex *B, int ldb,
                 double *W, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuDoubleComplex *, int, cuDoubleComplex *, int,
      double *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCreateSyevjInfo(syevjInfo_t *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreateSyevjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDestroySyevjInfo(syevjInfo_t info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroySyevjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjSetTolerance(syevjInfo_t info,
                                                          double tolerance) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t, double);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjSetTolerance");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, tolerance);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjSetMaxSweeps(syevjInfo_t info,
                                                          int max_sweeps) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjSetMaxSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, max_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjSetSortEig(syevjInfo_t info,
                                                        int sort_eig) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjSetSortEig");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, sort_eig);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjGetResidual(
    cusolverDnHandle_t handle, syevjInfo_t info, double *residual) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t,
                                                  syevjInfo_t, double *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjGetResidual");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, residual);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjGetSweeps(
    cusolverDnHandle_t handle, syevjInfo_t info, int *executed_sweeps) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, syevjInfo_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjGetSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, executed_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const float *A, int lda, const float *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const float *, int, const float *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnSsyevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const double *A, int lda, const double *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const double *, int, const double *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnDsyevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuComplex *A, int lda, const float *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuComplex *, int, const float *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnCheevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuDoubleComplex *A, int lda, const double *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuDoubleComplex *, int, const double *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnZheevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, float *A, int lda, float *W, float *work, int lwork, int *info,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, float *,
      int, float *, float *, int, int *, syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, double *A, int lda, double *W, double *work, int lwork, int *info,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, double *,
      int, double *, double *, int, int *, syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, cuComplex *A, int lda, float *W, cuComplex *work, int lwork,
    int *info, syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, cuComplex *,
      int, float *, cuComplex *, int, int *, syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, cuDoubleComplex *A, int lda, double *W, cuDoubleComplex *work,
    int lwork, int *info, syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      cuDoubleComplex *, int, double *, cuDoubleComplex *, int, int *,
      syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const float *A, int lda, const float *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const float *, int, const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const double *A, int lda, const double *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const double *, int, const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuComplex *A, int lda, const float *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuComplex *, int, const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuDoubleComplex *A, int lda, const double *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuDoubleComplex *, int, const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevj(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *W,
                                              float *work, int lwork, int *info,
                                              syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, float *,
      int, float *, float *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevj(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, double *W,
                                              double *work, int lwork,
                                              int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, double *,
      int, double *, double *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevj(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, float *W,
                                              cuComplex *work, int lwork,
                                              int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, cuComplex *,
      int, float *, cuComplex *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, cuDoubleComplex *A, int lda, double *W, cuDoubleComplex *work,
    int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      cuDoubleComplex *, int, double *, cuDoubleComplex *, int, int *,
      syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const float *A, int lda, const float *B,
    int ldb, const float *W, int *lwork, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const float *, int, const float *, int,
      const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const double *A, int lda, const double *B,
    int ldb, const double *W, int *lwork, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const double *, int, const double *, int,
      const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuComplex *A, int lda,
    const cuComplex *B, int ldb, const float *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuComplex *, int, const cuComplex *, int,
      const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *B, int ldb, const double *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, float *A, int lda, float *B, int ldb,
    float *W, float *work, int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, float *, int, float *, int, float *, float *, int,
      int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, double *A, int lda, double *B, int ldb,
    double *W, double *work, int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, double *, int, double *, int, double *, double *,
      int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, cuComplex *A, int lda, cuComplex *B, int ldb,
    float *W, cuComplex *work, int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuComplex *, int, cuComplex *, int, float *,
      cuComplex *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, cuDoubleComplex *A, int lda,
    cuDoubleComplex *B, int ldb, double *W, cuDoubleComplex *work, int lwork,
    int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuDoubleComplex *, int, cuDoubleComplex *, int,
      double *, cuDoubleComplex *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCreateGesvdjInfo(gesvdjInfo_t *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreateGesvdjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDestroyGesvdjInfo(gesvdjInfo_t info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroyGesvdjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjSetTolerance(gesvdjInfo_t info,
                                                           double tolerance) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t, double);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjSetTolerance");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, tolerance);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjSetMaxSweeps(gesvdjInfo_t info,
                                                           int max_sweeps) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjSetMaxSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, max_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjSetSortEig(gesvdjInfo_t info,
                                                         int sort_svd) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjSetSortEig");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, sort_svd);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjGetResidual(
    cusolverDnHandle_t handle, gesvdjInfo_t info, double *residual) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t,
                                                  gesvdjInfo_t, double *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjGetResidual");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, residual);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjGetSweeps(
    cusolverDnHandle_t handle, gesvdjInfo_t info, int *executed_sweeps) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, gesvdjInfo_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjGetSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, executed_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const float *A, int lda, const float *S, const float *U, int ldu,
    const float *V, int ldv, int *lwork, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const float *, int,
      const float *, const float *, int, const float *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnSgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const double *A, int lda, const double *S, const double *U, int ldu,
    const double *V, int ldv, int *lwork, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const double *, int,
      const double *, const double *, int, const double *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnDgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const cuComplex *A, int lda, const float *S, const cuComplex *U, int ldu,
    const cuComplex *V, int ldv, int *lwork, gesvdjInfo_t params,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const cuComplex *, int,
      const float *, const cuComplex *, int, const cuComplex *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnCgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const cuDoubleComplex *A, int lda, const double *S,
    const cuDoubleComplex *U, int ldu, const cuDoubleComplex *V, int ldv,
    int *lwork, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const cuDoubleComplex *,
      int, const double *, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnZgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n, float *A,
    int lda, float *S, float *U, int ldu, float *V, int ldv, float *work,
    int lwork, int *info, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, float *, int, float *,
      float *, int, float *, int, float *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n, double *A,
    int lda, double *S, double *U, int ldu, double *V, int ldv, double *work,
    int lwork, int *info, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, double *, int, double *,
      double *, int, double *, int, double *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    cuComplex *A, int lda, float *S, cuComplex *U, int ldu, cuComplex *V,
    int ldv, cuComplex *work, int lwork, int *info, gesvdjInfo_t params,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, cuComplex *, int,
      float *, cuComplex *, int, cuComplex *, int, cuComplex *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    cuDoubleComplex *A, int lda, double *S, cuDoubleComplex *U, int ldu,
    cuDoubleComplex *V, int ldv, cuDoubleComplex *work, int lwork, int *info,
    gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, cuDoubleComplex *, int,
      double *, cuDoubleComplex *, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const float *A, int lda, const float *S, const float *U, int ldu,
    const float *V, int ldv, int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const float *, int,
      const float *, const float *, int, const float *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const double *A, int lda, const double *S, const double *U, int ldu,
    const double *V, int ldv, int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const double *, int,
      const double *, const double *, int, const double *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const cuComplex *A, int lda, const float *S, const cuComplex *U, int ldu,
    const cuComplex *V, int ldv, int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const cuComplex *,
      int, const float *, const cuComplex *, int, const cuComplex *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const cuDoubleComplex *A, int lda, const double *S,
    const cuDoubleComplex *U, int ldu, const cuDoubleComplex *V, int ldv,
    int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int,
      const cuDoubleComplex *, int, const double *, const cuDoubleComplex *,
      int, const cuDoubleComplex *, int, int *, gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    float *A, int lda, float *S, float *U, int ldu, float *V, int ldv,
    float *work, int lwork, int *info, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, float *, int,
      float *, float *, int, float *, int, float *, int, int *, gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    double *A, int lda, double *S, double *U, int ldu, double *V, int ldv,
    double *work, int lwork, int *info, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, double *, int,
      double *, double *, int, double *, int, double *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    cuComplex *A, int lda, float *S, cuComplex *U, int ldu, cuComplex *V,
    int ldv, cuComplex *work, int lwork, int *info, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, cuComplex *, int,
      float *, cuComplex *, int, cuComplex *, int, cuComplex *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    cuDoubleComplex *A, int lda, double *S, cuDoubleComplex *U, int ldu,
    cuDoubleComplex *V, int ldv, cuDoubleComplex *work, int lwork, int *info,
    gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, cuDoubleComplex *,
      int, double *, cuDoubleComplex *, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *, gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const float *d_A, int lda, long long int strideA, const float *d_S,
    long long int strideS, const float *d_U, int ldu, long long int strideU,
    const float *d_V, int ldv, long long int strideV, int *lwork,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const float *, int,
      long long, const float *, long long, const float *, int, long long,
      const float *, int, long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnSgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const double *d_A, int lda, long long int strideA, const double *d_S,
    long long int strideS, const double *d_U, int ldu, long long int strideU,
    const double *d_V, int ldv, long long int strideV, int *lwork,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const double *, int,
      long long, const double *, long long, const double *, int, long long,
      const double *, int, long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnDgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuComplex *d_A, int lda, long long int strideA, const float *d_S,
    long long int strideS, const cuComplex *d_U, int ldu, long long int strideU,
    const cuComplex *d_V, int ldv, long long int strideV, int *lwork,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const cuComplex *,
      int, long long, const float *, long long, const cuComplex *, int,
      long long, const cuComplex *, int, long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnCgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuDoubleComplex *d_A, int lda, long long int strideA,
    const double *d_S, long long int strideS, const cuDoubleComplex *d_U,
    int ldu, long long int strideU, const cuDoubleComplex *d_V, int ldv,
    long long int strideV, int *lwork, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int,
      const cuDoubleComplex *, int, long long, const double *, long long,
      const cuDoubleComplex *, int, long long, const cuDoubleComplex *, int,
      long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnZgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const float *d_A, int lda, long long int strideA, float *d_S,
    long long int strideS, float *d_U, int ldu, long long int strideU,
    float *d_V, int ldv, long long int strideV, float *d_work, int lwork,
    int *d_info, double *h_R_nrmF, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const float *, int,
      long long, float *, long long, float *, int, long long, float *, int,
      long long, float *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const double *d_A, int lda, long long int strideA, double *d_S,
    long long int strideS, double *d_U, int ldu, long long int strideU,
    double *d_V, int ldv, long long int strideV, double *d_work, int lwork,
    int *d_info, double *h_R_nrmF, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const double *, int,
      long long, double *, long long, double *, int, long long, double *, int,
      long long, double *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuComplex *d_A, int lda, long long int strideA, float *d_S,
    long long int strideS, cuComplex *d_U, int ldu, long long int strideU,
    cuComplex *d_V, int ldv, long long int strideV, cuComplex *d_work,
    int lwork, int *d_info, double *h_R_nrmF, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const cuComplex *,
      int, long long, float *, long long, cuComplex *, int, long long,
      cuComplex *, int, long long, cuComplex *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuDoubleComplex *d_A, int lda, long long int strideA, double *d_S,
    long long int strideS, cuDoubleComplex *d_U, int ldu, long long int strideU,
    cuDoubleComplex *d_V, int ldv, long long int strideV,
    cuDoubleComplex *d_work, int lwork, int *d_info, double *h_R_nrmF,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int,
      const cuDoubleComplex *, int, long long, double *, long long,
      cuDoubleComplex *, int, long long, cuDoubleComplex *, int, long long,
      cuDoubleComplex *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCreateParams(cusolverDnParams_t *params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnParams_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreateParams");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDestroyParams(cusolverDnParams_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnParams_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroyParams");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSetAdvOptions(cusolverDnParams_t params,
                        cusolverDnFunction_t function, cusolverAlgMode_t algo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnParams_t, cusolverDnFunction_t, cusolverAlgMode_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSetAdvOptions");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(params, function, algo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnPotrf_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, cublasFillMode_t uplo,
    int64_t n, cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType computeType, size_t *workspaceInBytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasFillMode_t, int64_t,
      cudaDataType, const void *, int64_t, cudaDataType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnPotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, uplo, n, dataTypeA, A, lda, computeType,
                  workspaceInBytes);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnPotrf(cusolverDnHandle_t handle, cusolverDnParams_t params,
                cublasFillMode_t uplo, int64_t n, cudaDataType dataTypeA,
                void *A, int64_t lda, cudaDataType computeType, void *pBuffer,
                size_t workspaceInBytes, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasFillMode_t, int64_t,
      cudaDataType, void *, int64_t, cudaDataType, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnPotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, uplo, n, dataTypeA, A, lda, computeType,
                  pBuffer, workspaceInBytes, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnPotrs(
    cusolverDnHandle_t handle, cusolverDnParams_t params, cublasFillMode_t uplo,
    int64_t n, int64_t nrhs, cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType dataTypeB, void *B, int64_t ldb, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasFillMode_t, int64_t,
      int64_t, cudaDataType, const void *, int64_t, cudaDataType, void *,
      int64_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnPotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, uplo, n, nrhs, dataTypeA, A, lda, dataTypeB,
                  B, ldb, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGeqrf_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType dataTypeTau, const void *tau, cudaDataType computeType,
    size_t *workspaceInBytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      const void *, int64_t, cudaDataType, const void *, cudaDataType,
      size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, dataTypeTau, tau,
                  computeType, workspaceInBytes);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnGeqrf(cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m,
                int64_t n, cudaDataType dataTypeA, void *A, int64_t lda,
                cudaDataType dataTypeTau, void *tau, cudaDataType computeType,
                void *pBuffer, size_t workspaceInBytes, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      void *, int64_t, cudaDataType, void *, cudaDataType, void *, size_t,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, dataTypeTau, tau,
                  computeType, pBuffer, workspaceInBytes, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGetrf_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType computeType, size_t *workspaceInBytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      const void *, int64_t, cudaDataType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, computeType,
                  workspaceInBytes);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnGetrf(cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m,
                int64_t n, cudaDataType dataTypeA, void *A, int64_t lda,
                int64_t *ipiv, cudaDataType computeType, void *pBuffer,
                size_t workspaceInBytes, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      void *, int64_t, int64_t *, cudaDataType, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, ipiv, computeType,
                  pBuffer, workspaceInBytes, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGetrs(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cublasOperation_t trans, int64_t n, int64_t nrhs, cudaDataType dataTypeA,
    const void *A, int64_t lda, const int64_t *ipiv, cudaDataType dataTypeB,
    void *B, int64_t ldb, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasOperation_t, int64_t,
      int64_t, cudaDataType, const void *, int64_t, const int64_t *,
      cudaDataType, void *, int64_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, trans, n, nrhs, dataTypeA, A, lda, ipiv,
                  dataTypeB, B, ldb, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSyevd_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, cublasFillMode_t uplo, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda, cudaDataType dataTypeW,
    const void *W, cudaDataType computeType, size_t *workspaceInBytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cublasFillMode_t, int64_t, cudaDataType, const void *, int64_t,
      cudaDataType, const void *, cudaDataType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSyevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, uplo, n, dataTypeA, A, lda, dataTypeW,
                  W, computeType, workspaceInBytes);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSyevd(cusolverDnHandle_t handle, cusolverDnParams_t params,
                cusolverEigMode_t jobz, cublasFillMode_t uplo, int64_t n,
                cudaDataType dataTypeA, void *A, int64_t lda,
                cudaDataType dataTypeW, void *W, cudaDataType computeType,
                void *pBuffer, size_t workspaceInBytes, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cublasFillMode_t, int64_t, cudaDataType, void *, int64_t, cudaDataType,
      void *, cudaDataType, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSyevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, uplo, n, dataTypeA, A, lda, dataTypeW,
                  W, computeType, pBuffer, workspaceInBytes, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSyevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, cusolverEigRange_t range, cublasFillMode_t uplo,
    int64_t n, cudaDataType dataTypeA, const void *A, int64_t lda, void *vl,
    void *vu, int64_t il, int64_t iu, int64_t *h_meig, cudaDataType dataTypeW,
    const void *W, cudaDataType computeType, size_t *workspaceInBytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int64_t, cudaDataType, const void *,
      int64_t, void *, void *, int64_t, int64_t, int64_t *, cudaDataType,
      const void *, cudaDataType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSyevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, range, uplo, n, dataTypeA, A, lda, vl,
                  vu, il, iu, h_meig, dataTypeW, W, computeType,
                  workspaceInBytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSyevdx(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, cusolverEigRange_t range, cublasFillMode_t uplo,
    int64_t n, cudaDataType dataTypeA, void *A, int64_t lda, void *vl, void *vu,
    int64_t il, int64_t iu, int64_t *meig64, cudaDataType dataTypeW, void *W,
    cudaDataType computeType, void *pBuffer, size_t workspaceInBytes,
    int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int64_t, cudaDataType, void *,
      int64_t, void *, void *, int64_t, int64_t, int64_t *, cudaDataType,
      void *, cudaDataType, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSyevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, range, uplo, n, dataTypeA, A, lda, vl,
                  vu, il, iu, meig64, dataTypeW, W, computeType, pBuffer,
                  workspaceInBytes, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGesvd_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, signed char jobu,
    signed char jobvt, int64_t m, int64_t n, cudaDataType dataTypeA,
    const void *A, int64_t lda, cudaDataType dataTypeS, const void *S,
    cudaDataType dataTypeU, const void *U, int64_t ldu, cudaDataType dataTypeVT,
    const void *VT, int64_t ldvt, cudaDataType computeType,
    size_t *workspaceInBytes) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, signed char, signed char, int64_t,
      int64_t, cudaDataType, const void *, int64_t, cudaDataType, const void *,
      cudaDataType, const void *, int64_t, cudaDataType, const void *, int64_t,
      cudaDataType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobu, jobvt, m, n, dataTypeA, A, lda,
                  dataTypeS, S, dataTypeU, U, ldu, dataTypeVT, VT, ldvt,
                  computeType, workspaceInBytes);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGesvd(
    cusolverDnHandle_t handle, cusolverDnParams_t params, signed char jobu,
    signed char jobvt, int64_t m, int64_t n, cudaDataType dataTypeA, void *A,
    int64_t lda, cudaDataType dataTypeS, void *S, cudaDataType dataTypeU,
    void *U, int64_t ldu, cudaDataType dataTypeVT, void *VT, int64_t ldvt,
    cudaDataType computeType, void *pBuffer, size_t workspaceInBytes,
    int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, signed char, signed char, int64_t,
      int64_t, cudaDataType, void *, int64_t, cudaDataType, void *,
      cudaDataType, void *, int64_t, cudaDataType, void *, int64_t,
      cudaDataType, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobu, jobvt, m, n, dataTypeA, A, lda,
                  dataTypeS, S, dataTypeU, U, ldu, dataTypeVT, VT, ldvt,
                  computeType, pBuffer, workspaceInBytes, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXpotrf_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, cublasFillMode_t uplo,
    int64_t n, cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType computeType, size_t *workspaceInBytesOnDevice,
    size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasFillMode_t, int64_t,
      cudaDataType, const void *, int64_t, cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, uplo, n, dataTypeA, A, lda, computeType,
                  workspaceInBytesOnDevice, workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnXpotrf(cusolverDnHandle_t handle, cusolverDnParams_t params,
                 cublasFillMode_t uplo, int64_t n, cudaDataType dataTypeA,
                 void *A, int64_t lda, cudaDataType computeType,
                 void *bufferOnDevice, size_t workspaceInBytesOnDevice,
                 void *bufferOnHost, size_t workspaceInBytesOnHost, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasFillMode_t, int64_t,
      cudaDataType, void *, int64_t, cudaDataType, void *, size_t, void *,
      size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, uplo, n, dataTypeA, A, lda, computeType,
                  bufferOnDevice, workspaceInBytesOnDevice, bufferOnHost,
                  workspaceInBytesOnHost, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXpotrs(
    cusolverDnHandle_t handle, cusolverDnParams_t params, cublasFillMode_t uplo,
    int64_t n, int64_t nrhs, cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType dataTypeB, void *B, int64_t ldb, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasFillMode_t, int64_t,
      int64_t, cudaDataType, const void *, int64_t, cudaDataType, void *,
      int64_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, uplo, n, nrhs, dataTypeA, A, lda, dataTypeB,
                  B, ldb, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgeqrf_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType dataTypeTau, const void *tau, cudaDataType computeType,
    size_t *workspaceInBytesOnDevice, size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      const void *, int64_t, cudaDataType, const void *, cudaDataType, size_t *,
      size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, dataTypeTau, tau,
                  computeType, workspaceInBytesOnDevice,
                  workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgeqrf(
    cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m, int64_t n,
    cudaDataType dataTypeA, void *A, int64_t lda, cudaDataType dataTypeTau,
    void *tau, cudaDataType computeType, void *bufferOnDevice,
    size_t workspaceInBytesOnDevice, void *bufferOnHost,
    size_t workspaceInBytesOnHost, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      void *, int64_t, cudaDataType, void *, cudaDataType, void *, size_t,
      void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, dataTypeTau, tau,
                  computeType, bufferOnDevice, workspaceInBytesOnDevice,
                  bufferOnHost, workspaceInBytesOnHost, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgetrf_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, int64_t m, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType computeType, size_t *workspaceInBytesOnDevice,
    size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      const void *, int64_t, cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, computeType,
                  workspaceInBytesOnDevice, workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnXgetrf(cusolverDnHandle_t handle, cusolverDnParams_t params,
                 int64_t m, int64_t n, cudaDataType dataTypeA, void *A,
                 int64_t lda, int64_t *ipiv, cudaDataType computeType,
                 void *bufferOnDevice, size_t workspaceInBytesOnDevice,
                 void *bufferOnHost, size_t workspaceInBytesOnHost, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, int64_t, int64_t, cudaDataType,
      void *, int64_t, int64_t *, cudaDataType, void *, size_t, void *, size_t,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, m, n, dataTypeA, A, lda, ipiv, computeType,
                  bufferOnDevice, workspaceInBytesOnDevice, bufferOnHost,
                  workspaceInBytesOnHost, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgetrs(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cublasOperation_t trans, int64_t n, int64_t nrhs, cudaDataType dataTypeA,
    const void *A, int64_t lda, const int64_t *ipiv, cudaDataType dataTypeB,
    void *B, int64_t ldb, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cublasOperation_t, int64_t,
      int64_t, cudaDataType, const void *, int64_t, const int64_t *,
      cudaDataType, void *, int64_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, trans, n, nrhs, dataTypeA, A, lda, ipiv,
                  dataTypeB, B, ldb, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevd_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, cublasFillMode_t uplo, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda, cudaDataType dataTypeW,
    const void *W, cudaDataType computeType, size_t *workspaceInBytesOnDevice,
    size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cublasFillMode_t, int64_t, cudaDataType, const void *, int64_t,
      cudaDataType, const void *, cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, uplo, n, dataTypeA, A, lda, dataTypeW,
                  W, computeType, workspaceInBytesOnDevice,
                  workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnXsyevd(cusolverDnHandle_t handle, cusolverDnParams_t params,
                 cusolverEigMode_t jobz, cublasFillMode_t uplo, int64_t n,
                 cudaDataType dataTypeA, void *A, int64_t lda,
                 cudaDataType dataTypeW, void *W, cudaDataType computeType,
                 void *bufferOnDevice, size_t workspaceInBytesOnDevice,
                 void *bufferOnHost, size_t workspaceInBytesOnHost, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cublasFillMode_t, int64_t, cudaDataType, void *, int64_t, cudaDataType,
      void *, cudaDataType, void *, size_t, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, uplo, n, dataTypeA, A, lda, dataTypeW,
                  W, computeType, bufferOnDevice, workspaceInBytesOnDevice,
                  bufferOnHost, workspaceInBytesOnHost, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, cusolverEigRange_t range, cublasFillMode_t uplo,
    int64_t n, cudaDataType dataTypeA, const void *A, int64_t lda, void *vl,
    void *vu, int64_t il, int64_t iu, int64_t *h_meig, cudaDataType dataTypeW,
    const void *W, cudaDataType computeType, size_t *workspaceInBytesOnDevice,
    size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int64_t, cudaDataType, const void *,
      int64_t, void *, void *, int64_t, int64_t, int64_t *, cudaDataType,
      const void *, cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, range, uplo, n, dataTypeA, A, lda, vl,
                  vu, il, iu, h_meig, dataTypeW, W, computeType,
                  workspaceInBytesOnDevice, workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevdx(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, cusolverEigRange_t range, cublasFillMode_t uplo,
    int64_t n, cudaDataType dataTypeA, void *A, int64_t lda, void *vl, void *vu,
    int64_t il, int64_t iu, int64_t *meig64, cudaDataType dataTypeW, void *W,
    cudaDataType computeType, void *bufferOnDevice,
    size_t workspaceInBytesOnDevice, void *bufferOnHost,
    size_t workspaceInBytesOnHost, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int64_t, cudaDataType, void *,
      int64_t, void *, void *, int64_t, int64_t, int64_t *, cudaDataType,
      void *, cudaDataType, void *, size_t, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, range, uplo, n, dataTypeA, A, lda, vl,
                  vu, il, iu, meig64, dataTypeW, W, computeType, bufferOnDevice,
                  workspaceInBytesOnDevice, bufferOnHost,
                  workspaceInBytesOnHost, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvd_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, signed char jobu,
    signed char jobvt, int64_t m, int64_t n, cudaDataType dataTypeA,
    const void *A, int64_t lda, cudaDataType dataTypeS, const void *S,
    cudaDataType dataTypeU, const void *U, int64_t ldu, cudaDataType dataTypeVT,
    const void *VT, int64_t ldvt, cudaDataType computeType,
    size_t *workspaceInBytesOnDevice, size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, signed char, signed char, int64_t,
      int64_t, cudaDataType, const void *, int64_t, cudaDataType, const void *,
      cudaDataType, const void *, int64_t, cudaDataType, const void *, int64_t,
      cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobu, jobvt, m, n, dataTypeA, A, lda,
                  dataTypeS, S, dataTypeU, U, ldu, dataTypeVT, VT, ldvt,
                  computeType, workspaceInBytesOnDevice,
                  workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvd(
    cusolverDnHandle_t handle, cusolverDnParams_t params, signed char jobu,
    signed char jobvt, int64_t m, int64_t n, cudaDataType dataTypeA, void *A,
    int64_t lda, cudaDataType dataTypeS, void *S, cudaDataType dataTypeU,
    void *U, int64_t ldu, cudaDataType dataTypeVT, void *VT, int64_t ldvt,
    cudaDataType computeType, void *bufferOnDevice,
    size_t workspaceInBytesOnDevice, void *bufferOnHost,
    size_t workspaceInBytesOnHost, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, signed char, signed char, int64_t,
      int64_t, cudaDataType, void *, int64_t, cudaDataType, void *,
      cudaDataType, void *, int64_t, cudaDataType, void *, int64_t,
      cudaDataType, void *, size_t, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobu, jobvt, m, n, dataTypeA, A, lda,
                  dataTypeS, S, dataTypeU, U, ldu, dataTypeVT, VT, ldvt,
                  computeType, bufferOnDevice, workspaceInBytesOnDevice,
                  bufferOnHost, workspaceInBytesOnHost, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdp_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, int econ, int64_t m, int64_t n,
    cudaDataType dataTypeA, const void *A, int64_t lda, cudaDataType dataTypeS,
    const void *S, cudaDataType dataTypeU, const void *U, int64_t ldu,
    cudaDataType dataTypeV, const void *V, int64_t ldv,
    cudaDataType computeType, size_t *workspaceInBytesOnDevice,
    size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t, int, int64_t,
      int64_t, cudaDataType, const void *, int64_t, cudaDataType, const void *,
      cudaDataType, const void *, int64_t, cudaDataType, const void *, int64_t,
      cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdp_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, econ, m, n, dataTypeA, A, lda,
                  dataTypeS, S, dataTypeU, U, ldu, dataTypeV, V, ldv,
                  computeType, workspaceInBytesOnDevice,
                  workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdp(
    cusolverDnHandle_t handle, cusolverDnParams_t params,
    cusolverEigMode_t jobz, int econ, int64_t m, int64_t n,
    cudaDataType dataTypeA, void *A, int64_t lda, cudaDataType dataTypeS,
    void *S, cudaDataType dataTypeU, void *U, int64_t ldu,
    cudaDataType dataTypeV, void *V, int64_t ldv, cudaDataType computeType,
    void *bufferOnDevice, size_t workspaceInBytesOnDevice, void *bufferOnHost,
    size_t workspaceInBytesOnHost, int *d_info, double *h_err_sigma) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, cusolverEigMode_t, int, int64_t,
      int64_t, cudaDataType, void *, int64_t, cudaDataType, void *,
      cudaDataType, void *, int64_t, cudaDataType, void *, int64_t,
      cudaDataType, void *, size_t, void *, size_t, int *, double *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobz, econ, m, n, dataTypeA, A, lda,
                  dataTypeS, S, dataTypeU, U, ldu, dataTypeV, V, ldv,
                  computeType, bufferOnDevice, workspaceInBytesOnDevice,
                  bufferOnHost, workspaceInBytesOnHost, d_info, h_err_sigma);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdr_bufferSize(
    cusolverDnHandle_t handle, cusolverDnParams_t params, signed char jobu,
    signed char jobv, int64_t m, int64_t n, int64_t k, int64_t p,
    int64_t niters, cudaDataType dataTypeA, const void *A, int64_t lda,
    cudaDataType dataTypeSrand, const void *Srand, cudaDataType dataTypeUrand,
    const void *Urand, int64_t ldUrand, cudaDataType dataTypeVrand,
    const void *Vrand, int64_t ldVrand, cudaDataType computeType,
    size_t *workspaceInBytesOnDevice, size_t *workspaceInBytesOnHost) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, signed char, signed char, int64_t,
      int64_t, int64_t, int64_t, int64_t, cudaDataType, const void *, int64_t,
      cudaDataType, const void *, cudaDataType, const void *, int64_t,
      cudaDataType, const void *, int64_t, cudaDataType, size_t *, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobu, jobv, m, n, k, p, niters, dataTypeA, A,
                  lda, dataTypeSrand, Srand, dataTypeUrand, Urand, ldUrand,
                  dataTypeVrand, Vrand, ldVrand, computeType,
                  workspaceInBytesOnDevice, workspaceInBytesOnHost);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdr(
    cusolverDnHandle_t handle, cusolverDnParams_t params, signed char jobu,
    signed char jobv, int64_t m, int64_t n, int64_t k, int64_t p,
    int64_t niters, cudaDataType dataTypeA, void *A, int64_t lda,
    cudaDataType dataTypeSrand, void *Srand, cudaDataType dataTypeUrand,
    void *Urand, int64_t ldUrand, cudaDataType dataTypeVrand, void *Vrand,
    int64_t ldVrand, cudaDataType computeType, void *bufferOnDevice,
    size_t workspaceInBytesOnDevice, void *bufferOnHost,
    size_t workspaceInBytesOnHost, int *d_info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverDnParams_t, signed char, signed char, int64_t,
      int64_t, int64_t, int64_t, int64_t, cudaDataType, void *, int64_t,
      cudaDataType, void *, cudaDataType, void *, int64_t, cudaDataType, void *,
      int64_t, cudaDataType, void *, size_t, void *, size_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, params, jobu, jobv, m, n, k, p, niters, dataTypeA, A,
                  lda, dataTypeSrand, Srand, dataTypeUrand, Urand, ldUrand,
                  dataTypeVrand, Vrand, ldVrand, computeType, bufferOnDevice,
                  workspaceInBytesOnDevice, bufferOnHost,
                  workspaceInBytesOnHost, d_info);
}

}  // extern "C"
